Compilers typically convert source code into object code or some other intermediate code representation, such as byte codes. Source code is a set of instructions written in a programming language by a software developer. Object code, in general, is machine code or other low level code, translated from source code toward execution by a system's central processing unit (CPU). Compilation of source code can occur either statically or dynamically.
Statically compiled programs are compiled once and the resulting binary object code is used repeatedly. Typically, static compilation occurs prior to shipping the program to the end user. Therefore, the time required to compile a program in static compilation environments does not effect the performance of the program when executed by the end user.
Dynamic compilation execution environments, such as web browsers, involve the compilation of source code simultaneously or time-sharing with the execution of a program. Dynamic compilation is advantageous because code is shipped in a platform independent form and the compilation can use information about the target machine and security environment. However, the time required to dynamically compile the source code directly impacts the speed of the program execution.
Programming and scripting languages provide the software developer with a set of features and tools for organizing source code within a program. Class templates and classes generated from class templates (hereinafter template-generated classes) are examples of tools provided by some programming and scripting languages within static compilation environments.
In object-oriented programming, a class is a descriptive tool used in source code for characterizing an object as a set of data structures (i.e. fields) or a set of routines (i.e. methods). For example, an array of integers can be represented in a class, IntegerArray. Such a class may include a field for storing the size of the array and another field comprising a data structure for representing the integers stored in an IntegerArray. In addition, the IntegerArray class may include methods for accessing the contents of the array, such as “get” and “set” methods.
Once compiled, the class is represented as an object defining storage allocation for the class fields and specifying the types of data that can be stored within them. In addition, the class object provides access to executable object code for executing class methods. Instances of a class are generated from this class representation.
An instance is an object that exists during program execution that functions in accordance with the guidelines specified by the class representation. An instance stores its own values in the storage allocated for the class fields and executes methods compiled and stored by the class representation. An instance is created when a class is instantiated during program execution. Instantiation is the process of creating an instance of a class, typically, by calling a special operator or function (e.g., “new{ }”).
Class templates are useful programming tools for generating classes that provide the same basic functionality, but differ with respect to the types of data that are stored and serviced within the class. FIG. 1 is a block diagram illustrating an object hierarchy involving class templates. A class template 100 generates classes 200 which are used to declare and instantiate instances of classes 300.
A class template has source code forming the foundation for new template-generated classes. Different template-generated classes can be generated from the same class template definition by specifying different parameters. A parameter can be a primitive data type, class, value, or other data structure. Therefore, the use of class templates facilitates the reuse of source code.
The use of class templates also leads to more robust software, because such template-generated classes can be type-checked when compiled. In addition, the use of class templates in generating classes leads to faster software, because the compiler can generate efficient code with the knowledge of the parameters defining such classes.